package main

import "fmt"

// H首字母大写，表示其他包可以访问
type Hero struct {
	// 属性首字母大写，表示该属性对外是能访问的，否则只能当前包内访问
	Name  string
	Age   int
	level int
}

// this没有特殊含义，可以改为其他任一变量名
func (this Hero) getName() string {
	fmt.Println("Name = ", this.Name)
	return this.Name
}
func (xxxx Hero) setName(name string) {
	xxxx.Name = name
}
func (xxxx *Hero) setNameAddr(name string) {
	xxxx.Name = name
}

func (this Hero) show() {
	fmt.Print("name = ", this.Name)
	fmt.Print(", Age = ", this.Age)
	fmt.Print(", Level = ", this.level)
	fmt.Println("")
}
func main() {
	// 创建一个对象
	var hero = Hero{Name: "zhangsan", Age: 18, level: 1}
	println("创建一个Hero对象，为:")
	hero.show()
	println("值传递方法调用后，不修改对象值")
	hero.setName("李四")
	hero.show()
	println("址传递方法调用后，修改对象值")
	hero.setNameAddr("王五")
	hero.show()
}
